// ✅ 第一个策略模块：select32ByS1.js（频率统计策略）
// 🎯 S1 策略：频率统计（FreqStat）
// 根据窗口内出现次数高的号码，优先选择前 32 个号码

const _ = require("lodash");

/**
 * 根据 temp 历史数据选出 32 个高频号码
 * @param {Array} temp - 历史数据窗口 [{ time, number }]
 * @returns {Array<string>} - 32 个号码（字符串，补 0）
 */
function select32ByS1(temp) {
  // 初始化频率映射
  const frequencyMap = {};

  temp.forEach(({ number }) => {
    const num = number.toString().padStart(2, '0');
    frequencyMap[num] = (frequencyMap[num] || 0) + 1;
  });

  // 将频率映射转为数组并排序
  const sorted = Object.entries(frequencyMap)
    .sort((a, b) => b[1] - a[1]) // 降序
    .map(([num]) => num);

  // 补全不足 32 个号码
  const allNumbers = Array.from({ length: 49 }, (_, i) =>
    (i + 1).toString().padStart(2, '0')
  );

  const result = _.uniq([...sorted, ..._.shuffle(allNumbers)]).slice(0, 32);

  return result;
}

module.exports = select32ByS1;
